﻿#region 참조 네임스페이스

using Skying.Windows.API;
using System;

#endregion

namespace Skying.Windows
{
	/// <summary>
	/// 트레이 윈도우에 대한 컨트롤 인터페이스를 제공한다.
	/// </summary>
	public static class TrayWindow
	{
		#region 상수

		/// <summary>
		/// 트레이 윈도우의 클래스명 상수를 나타낸다.
		/// </summary>
		private static string _SHELL_TRAY_WINDOW_CLASSNAME = "Shell_TrayWnd";

		/// <summary>
		/// 트레이 윈도우의 핸들 상수를 나타낸다.
		/// </summary>
		private static readonly IntPtr _SHELL_TRAY_WINDOW_HANDLE;

		#endregion

		#region 프로퍼티

		/// <summary>
		/// 트레이 윈도우가 존재하는지 여부를 가져온다.
		/// </summary>
		public static bool Exist
		{
			get
			{
				return !_SHELL_TRAY_WINDOW_HANDLE.Equals(IntPtr.Zero);
			}
		}

		#endregion

		#region 생성자/소멸자

		static TrayWindow()
		{
			_SHELL_TRAY_WINDOW_HANDLE = User32.FindWindow(_SHELL_TRAY_WINDOW_CLASSNAME, string.Empty);
		}

		#endregion

		#region 트레이 윈도우 Show/Hide

		/// <summary>
		/// 트레이 윈도우을 보여지도록 조정한다.
		/// </summary>
		public static void Show()
		{
			if (_SHELL_TRAY_WINDOW_HANDLE != null && !_SHELL_TRAY_WINDOW_HANDLE.Equals(IntPtr.Zero))
			{
				User32.ShowWindow(_SHELL_TRAY_WINDOW_HANDLE, User32.CmdShow.SW_SHOW);
			}
		}

		/// <summary>
		/// 트레이 윈도우를 감추도록 조정한다.
		/// </summary>
		public static void Hide()
		{
			if (_SHELL_TRAY_WINDOW_HANDLE != null && !_SHELL_TRAY_WINDOW_HANDLE.Equals(IntPtr.Zero))
			{
				User32.ShowWindow(_SHELL_TRAY_WINDOW_HANDLE, User32.CmdShow.SW_HIDE);
			}
		}

		#endregion
	}
}